package com.earthchen.udp.monitor.handler;

import com.earthchen.udp.pojo.LogEvent;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;

/**
 * 扩展 SimpleChannelInboundHandler 以处理 LogEvent 消息
 *
 * @author: EarthChen
 * @date: 2018/05/04
 */
public class LogEventHandler extends SimpleChannelInboundHandler<LogEvent> {

    /**
     * 当异常发生时，打印栈跟踪信息，
     * 并关闭对应的 Channel
     *
     * @param ctx
     * @param cause
     * @throws Exception
     */
    @Override
    public void exceptionCaught(ChannelHandlerContext ctx,
                                Throwable cause) throws Exception {
        cause.printStackTrace();
        ctx.close();
    }


    /**
     * 创建 StringBuilder，并且
     * 构建输出的字符串
     * <p>
     * 打印 LogEvent的数据
     * <p>
     * <p>
     * 以毫秒为单位的被接收的时间戳；
     * 发送方的 InetSocketAddress，其由 IP 地址和端口组成；
     * 生成 LogEvent 消息的日志文件的绝对路径名；
     * 实际上的日志消息，其代表日志文件中的一行
     *
     * @param ctx
     * @param event
     * @throws Exception
     */
    @Override
    public void channelRead0(ChannelHandlerContext ctx,
                             LogEvent event) throws Exception {
        String builder = String.valueOf(event.getReceivedTimestamp()) +
                " [" +
                event.getSource().toString() +
                "] [" +
                event.getLogfile() +
                "] : " +
                event.getMsg();
        System.out.println(builder);
    }
}
